package com.tedu.api.thread;








import org.junit.Test;

import javax.imageio.stream.ImageInputStream;
import java.io.File;
import java.io.FileFilter;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;


/**
 * Lambda表达式->(){}  【接口/抽象--匿名内部类】
 *                     【集合遍历--匿名内部类】
 * Collection--->List:存重复元素并且有序【保存数据结构一致】
 *               Set：存无序并且不重复【保存数据结构一致】
 *               Queue：队列结合业务
 *
 * Map------------>HashMap：键值对存储
 */
public class LambdaDemo {
    @Test
    public void testList() {
        //List集合：保存元素
        List<String> list = new ArrayList<>();
        list.add("白洋淀");
        list.add("正定古城");
        list.add("河头老街");
        list.add("白石山");
        //集合几种遍历方式： 普通for，增强for，支持forEach方法
        for (String s : list) {
            System.out.println("增强for" + s);
        }
        //支持forEach方法：遍历集合元素
        // Consumer针对List集合接口针对List,Set,Queue集合提供接口：功能获取list集合元素
        //accept()  获取list集合的所有元素
        list.forEach(new Consumer<String>() {
            public void accept(String s) {
                System.out.println("consumer接口遍历方案：" + s);
            }
        });
        //支持forEach方法：遍历集合元素【Consumer 匿名内部类】
        //编写Lambda表达式
        list.forEach(i -> System.out.println("Lambda遍历方案：" + i));

    }

   @Test
    public void testMap() {
        //创建Map集合：键值对
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "唐山");
        map.put(2, "石家庄");
        map.put(3, "秦皇岛");
        map.put(4, "邯郸");
        //遍历集合：普通for 增强for forEach(BiConSummer)
        //键值对-->一组Entry对象--获取每组Entry对象
        //BiConsummer接口---获取每组Entry对象--accept()获取Entry对象
        map.forEach(new BiConsumer<Integer, String>() {
            public void accept(Integer integer, String s) {
                System.out.println(integer + s);
            }
        });

        //Lambda表达式
        map.forEach((i, s) -> System.out.println("Lambda表达式" + i + s));


    }

    /**
     * 作业：  1.使用Lambda表达式完成 Thead线程创建
     * 2.使用Lambda表达式完成  Runnable线程创建
     * 3.IO流--File类：listFile(FileFilter)  五行代码
     * 目标：【io包下FilterAPI类】实现使用Lambda表达式完成
     * 4. IO流--File类：listFile(FileFilter)  二行代码
     * 目标：【io包下FilterAPI类】实现使用Lambda表达式完成
     * 5.集合：
     * 目标：【list包下ListAPI类下单元测试testComparator】
     */

  @Test
    public void LambdaHomeWork1(){
        Thread thread=new Thread(()->{for(int i=1;i<10;i++){
            System.out.println("立冬");
        }});
        thread.start();}
    @Test
    public void LambdaHomeWork2(){
        Runnable runnable=new Thread(()->{ for(int i=1;i<10;i++){
            System.out.println("立秋");
        }});
        runnable.run();}
    @Test
    public void LambdaHomeWork3(){
        File file=new File("./");
        FileFilter fi=(p)->{ return p.getName().startsWith("s");};

        File[] files=file.listFiles(fi);
        for(int i=0;i<files.length;i++){
            System.out.println("打印所有文件和文件夹的名字："+files[i].getName());} }

    @Test
    public void LambdaHomeWork4(){
        for(File f:new File("./").listFiles((p)->{ return p.getName().startsWith("s");})){
            System.out.println("遍历后过滤完成："+f);
        }
    }
    @Test
    public void LambdaHomeWork5(){
        List<String> list=new ArrayList<>();

        list.add("66666");
        list.add("7777");
        list.add("888");

        Comparator<String> c=(o1,o2)-> o2.length()-o1.length();

        Collections.sort(list,c);
        System.out.println("排序后的集合："+list);
    }}






































